#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main()
{
    //setTime用来保存输入的时间字符串
    char setTime[8];
    system("title 关闭计算机");
    printf("请输入关闭计算机的时间（格式为HH:MM:SS）:");
    gets(setTime);

    //获取当前时间
    //now是当前时间的秒数数据
    time_t now;
    //tmNow是当前时间的结构化数据
    struct tm *tmNow;
    time(&now);
    tmNow = localtime(&now);

    //分离时间字符串，得到时分秒的数值
    //iSetTime是时间字符串的数值数据
    long iSetTime;
    iSetTime = (((((setTime[0]-'0')*10+setTime[1]-'0')*10+setTime[3]-'0')*10
                 +setTime[4]-'0')*10+setTime[6]-'0')*10+setTime[7]-'0';
    //iSetHour是时钟数值，iSetMin是分钟数值，iSetSec是秒钟数值
    int iSetHour, iSetMin, iSetSec;
    iSetHour = iSetTime / 10000;
    iSetMin = (iSetTime % 10000) / 100;
    iSetSec = iSetTime % 100;

    //得到时间差的秒数数据
    if(iSetHour > 23 || iSetMin > 59 || iSetSec > 59)
    {
        printf("输入的时间格式有误！");
        return 0;
    }
    if(iSetSec < tmNow->tm_sec)
    {
        iSetSec = iSetSec + 60;
        iSetMin = iSetMin -1;
    }
    if(iSetMin < tmNow->tm_min)
    {
        iSetMin = iSetMin + 60;
        iSetHour = iSetHour - 1;
    }
    if(iSetHour < tmNow->tm_hour)
    {
        iSetHour = iSetHour + 24;
    }
    //totalSecond是时间差的秒数数值
    long totalSecond;
    totalSecond = ((iSetHour - tmNow->tm_hour)*60 + iSetMin - tmNow->tm_min)*60 +
                  iSetSec - tmNow->tm_sec;

    //调用系统命令关机
    char t[10], c[30] = "shutdown -s -t ";
    ltoa(totalSecond, t, 10);
    system(strcat(c, t));
    return 0;
}
